with Ada.Text_IO, Ada.Float_Text_IO, Ada.Integer_Text_IO;
with Ada.Calendar, Estanterias;
use Ada.Text_IO, Ada.Float_Text_IO, Ada.Integer_Text_IO;
use Ada.Calendar, Estanterias;

package body Zapateros is

    task body TareaZapatero is
	NombreZapatero: Str100.Bounded_String;
    	ZapatoAReparar: Zapato;
	Estanteria: TareaEstanteria_Ref;
	EstanteriaReparados: TareaEstanteriaInfinita_Ref;
    begin
	accept Init(EstanteriaZapatosAReparar: in TareaEstanteria_Ref; EstanteriaZapatosARepartir: in TareaEstanteriaInfinita_Ref; Nombre: in Str100.Bounded_String) do
		Estanteria := EstanteriaZapatosAReparar;
		EstanteriaReparados := EstanteriaZapatosARepartir;
		NombreZapatero := Nombre;
	end Init;
	loop
		Put_Line("[" &Str100.To_String(NombreZapatero) & "] Buscando Zapato a reparar...");
		Estanteria.all.Quitar(ZapatoAReparar);
		Put("[" &Str100.To_String(NombreZapatero) & "] Reparando Zapato: ");
		Put(Numero(ZapatoAReparar));
		New_Line;
		delay Duration(TiempoEstimado(ZapatoAReparar));

		Put_Line("[" &Str100.To_String(NombreZapatero) & "] Zapato reparado. Listo para Repartir... ");
		EstanteriaReparados.all.Guardar(ZapatoAReparar);
	end loop;
    end TareaZapatero;

end Zapateros;

